import type { RouteRecordRaw } from 'vue-router'

/**
 * 通过文件夹目录加载本地路由
 * @returns 加载本地路由
 */
function loadLocalRoutes() {
  const routes: RouteRecordRaw[] = []
  const files: Record<string, any> = import.meta.glob('@/router/main/**/*.ts', {
    eager: true
  })

  for (const key in files) {
    // 获取当前模块
    const module = files[key]
    // 如果当前模块有默认导出
    if (module.default) {
      // 将默认导出添加到dynamicRoutes数组中
      routes.push(module.default)
    }
  }
  return routes
}
export let firstMenu: any = null

/**
 * 用于将用户菜单映射到路由
 * @param userMenus 用户菜单
 * @returns
 */
export function menusMapToRoutes(userMenus: any[]) {
  // 加载本地路由
  const localRoutes = loadLocalRoutes()
  // console.log(userMenus)

  // console.log(localRoutes)

  // 定义一个空的路由数组
  const routes: RouteRecordRaw[] = []
  // 遍历用户菜单
  for (const menu of userMenus) {
    if (!menu.children || !menu.children.length) continue
    // 遍历menu的children数组
    for (const submenu of menu.children) {
      // 在routes数组中查找path与submenu的url相等的路由
      const route = localRoutes.find((item) => item.path === submenu.url)
      // 如果找到了，则将其添加到router中
      if (route) {
        // 外层菜单增加重定向功能
        if (!routes.find((item) => item.path === menu.url)) {
          routes.push({ path: menu.url, redirect: route.path })
        }
        if (!firstMenu) {
          firstMenu = submenu
        }
        routes.push(route)
      }
    }
  }
  // 返回路由数组
  return routes
}

/**
 * 路径映射至菜单
 * @param path 当前路径
 * @param userMenus 导航菜单
 */
export function pathMapToMenu(path: string, userMenus: any[]) {
  for (const menu of userMenus) {
    for (const submenu of menu.children) {
      if (submenu.url === path) {
        return submenu
      }
    }
  }
}

/**
 * 路径映射至面包屑
 * @param path 当前路径
 * @param userMenus 导航菜单
 * @returns
 */
export function pathMapToBreadCrumbs(path: string, userMenus: any[]) {
  const breadcrumbs: any[] = []
  for (const menu of userMenus) {
    for (const submenu of menu.children) {
      if (submenu.url === path) {
        breadcrumbs.push({ name: menu.name, path: menu.url })
        breadcrumbs.push({ name: submenu.name, path: submenu.url })
        return breadcrumbs
      }
    }
  }
  return breadcrumbs
}

/**
 * 6. 按钮权限
 * @param menuList 菜单列表
 * @returns 返回的权限数组
 */
export function mapUserMenuListToPermissions(menuList: any[]) {
  const permissions: string[] = []
  function recurseGetPermission(menus: any[]) {
    for (const item of menus) {
      if (item.type === 3) {
        permissions.push(item.permission)
      } else {
        recurseGetPermission(item.children ?? [])
      }
    }
  }
  recurseGetPermission(menuList)
  return permissions
}

/**
 * 用于将菜单列表转换为ID数组
 * @param menuList
 */
export function mapMenuListToIds(menuList: any[]) {
  if (!menuList) {
    return []
  }
  // 定义一个空数组，用于存储ID
  const ids: string[] = []

  // 定义一个递归函数，用于获取菜单ID
  function recurseGetId(menus: any[]) {
    // 遍历菜单列表
    for (const item of menus) {
      // 如果菜单有子菜单，则递归调用该函数
      if (item.children) {
        recurseGetId(item.children)
      } else {
        // 如果菜单没有子菜单，则将ID添加到数组中
        ids.push(item._id)
      }
    }
  }
  // 调用递归函数，传入菜单列表
  recurseGetId(menuList)

  // 返回ID数组
  return ids
}
